package com.service.Authorization.service.impl;

import com.service.Authorization.dao.PortalProgrammeInfoDao;
import com.service.Authorization.dto.BindAccount;
import com.service.Authorization.dto.desc;
import com.service.Authorization.entity.PortalProgrammeInfo;
import com.service.Authorization.service.PortalProgrammeInfoService;
import com.service.config.utils.ModelMapperUtil;
import com.service.config.utils.Result;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * (PortalProgrammeInfo)表服务实现类
 *
 * @author makejava
 * @since 2021-08-31 14:17:49
 */
@Service("portalProgrammeInfoService")
public class PortalProgrammeInfoServiceImpl implements PortalProgrammeInfoService {
    @Resource
    private PortalProgrammeInfoDao portalProgrammeInfoDao;
    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<PortalProgrammeInfo> queryAllByLimit(int offset, int limit) {
        return this.portalProgrammeInfoDao.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param portalProgrammeInfo 实例对象
     * @return 实例对象
     */
    @Override
    public PortalProgrammeInfo insert(PortalProgrammeInfo portalProgrammeInfo) {
        this.portalProgrammeInfoDao.insert(portalProgrammeInfo);
        return portalProgrammeInfo;
    }

    /**
     * 修改数据
     *
     * @param portalProgrammeInfo 实例对象
     * @return 实例对象
     */
    @Override
    public PortalProgrammeInfo update(PortalProgrammeInfo portalProgrammeInfo) {
        this.portalProgrammeInfoDao.update(portalProgrammeInfo);
        return portalProgrammeInfo;
    }

    @Override
    @Transactional
    public Result bindAccountAndProgramme(String userId, BindAccount bindAccount) {
        PortalProgrammeInfo portalProgrammeInfo = new PortalProgrammeInfo();
        List<String> stringList = new ArrayList<>();
        List<desc> bindAccountList = bindAccount.getBindAccountList();
        portalProgrammeInfo.setManageId(userId);
        List<PortalProgrammeInfo> portalProgrammeInfos = new ArrayList<>();
        if (bindAccountList.size() > 0) {
            portalProgrammeInfo.setProgrammeId(bindAccountList.get(0).getProgrammeId());
            portalProgrammeInfos = portalProgrammeInfoDao.queryAll(portalProgrammeInfo);
            if (portalProgrammeInfos.size() > 0) {
                portalProgrammeInfos.forEach(portalProgrammeInfo1 -> {
                    stringList.add(portalProgrammeInfo1.getPortalUserId());
                });
                portalProgrammeInfoDao.deleteAll(userId,bindAccountList.get(0).getProgrammeId(),stringList);
                List<PortalProgrammeInfo> portalProgrammeInfos1 = ModelMapperUtil.strictMapList(bindAccountList, PortalProgrammeInfo.class);
                portalProgrammeInfos1.stream().forEach(portalProgrammeInfo1 -> {
                    portalProgrammeInfo1.setManageId(userId);
                    portalProgrammeInfo1.setAddTime(new Date());
                });
                portalProgrammeInfoDao.insertBatch(portalProgrammeInfos1);
                return  Result.ok();
            }
            portalProgrammeInfos = ModelMapperUtil.strictMapList(bindAccountList, PortalProgrammeInfo.class);
            portalProgrammeInfos.forEach(portalProgrammeInfo1 -> {
                portalProgrammeInfo1.setManageId(userId);
                portalProgrammeInfo1.setAddTime(new Date());
            });
            portalProgrammeInfoDao.insertBatch(portalProgrammeInfos);
            return  Result.ok();
        }
        return Result.failure("参数不存在");
    }
}
